/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package familytree.struts.actions;

import familytree.negocio.IEventoProcessor;
import familytree.negocio.INodoProcessor;
import familytree.negocio.bo.EventoBO;
import familytree.negocio.bo.ImagenBO;
import familytree.negocio.bo.NodoBO;
import familytree.persistencia.pojos.Imagen;
import familytree.persistencia.pojos.Nodo;
import familytree.struts.forms.ArbolInicioForm;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author Jose
 */
public class EditarNodoAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private final static String OK = "ok";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Capturamos el form y el nodo
        ArbolInicioForm inicioForm = (ArbolInicioForm) form;
        Nodo nodo = inicioForm.getNodo();
        Nodo nodoActualVersionAntigua = (Nodo) request.getSession().getAttribute("nodoActual");
        String accion = request.getParameter("accionSeleccionada");
        if (accion.equals("cambiarFoto")) {
            return mapping.findForward("cambiarFoto");
        } else {
            //creamos las fecha de nacimiento y defunción.
            //La de defunción es la fecha actual si todavia no se indicó
            Calendar fechaNacimiento = inicioForm.getFechaNacimiento();
            Calendar fechaDefuncion = inicioForm.getFechaDefuncion();

            boolean existeEventoNacimiento = false;
            boolean existeEventoDefuncion = false;

            int diaA = fechaNacimiento.get(Calendar.DAY_OF_MONTH);
            int mesA = fechaNacimiento.get(Calendar.MONTH);
            int anioA = fechaNacimiento.get(Calendar.YEAR);


            if (nodoActualVersionAntigua.getFechaNacimiento() != null) {
                int diaB = nodoActualVersionAntigua.getFechaNacimiento().get(Calendar.DAY_OF_MONTH);
                int mesB = nodoActualVersionAntigua.getFechaNacimiento().get(Calendar.MONTH);
                int anioB = nodoActualVersionAntigua.getFechaNacimiento().get(Calendar.YEAR);
                if (diaA == diaB && mesA == mesB && anioA == anioB) {
                    existeEventoNacimiento = true;
                }
            }
            diaA = fechaDefuncion.get(Calendar.DAY_OF_MONTH);
            mesA = fechaDefuncion.get(Calendar.MONTH);
            anioA = fechaDefuncion.get(Calendar.YEAR);
            
            if (nodoActualVersionAntigua.getFechaDefuncion() != null){
                
                int diaB = nodoActualVersionAntigua.getFechaDefuncion().get(Calendar.DAY_OF_MONTH);
                int mesB = nodoActualVersionAntigua.getFechaDefuncion().get(Calendar.MONTH);
                int anioB = nodoActualVersionAntigua.getFechaDefuncion().get(Calendar.YEAR);
            
                 if (diaA == diaB && mesA == mesB && anioA == anioB){
                existeEventoDefuncion = true;
            }
            }

            nodo.setFechaNacimiento(fechaNacimiento);
            nodo.setFechaDefuncion(fechaDefuncion);



            //Recuperamos el parámetro que indica si hay que añadir fecha de Defunción
            String muerto = request.getParameter("muerto");
            //Recuperamos el nodoActual


            if (!muerto.toLowerCase().equals("si")){
                nodo.setFechaDefuncion(null);
            }
            //Lo modificamos con los datos insertados en el Form
            INodoProcessor nodoBd = new NodoBO();
            nodoBd.actualizaNodo(nodoActualVersionAntigua, nodo);
            //Volvemos a añadir el nodo en sesion con los cambios realizados
            Nodo nodoNuevo = nodoBd.getNodoPorIdNodo(nodoActualVersionAntigua.getIdNodo());
            IEventoProcessor eventoBo = new EventoBO();

            if (!existeEventoNacimiento && nodoNuevo.getFechaNacimiento() != null) {
                eventoBo.actualizaNacimiento(nodoNuevo);
            }
            if (nodoNuevo.getFechaDefuncion() != null && !existeEventoDefuncion) {
                eventoBo.actualizaDefuncion(nodoNuevo);
            }
            eventoBo.creaXmlCalendario(nodoNuevo.getArbol().getIdArbol());

            request.getSession().setAttribute("nodoActual", nodoNuevo);

            return mapping.findForward(OK);
        }

    }
}